/***********************************************************************************
 @file   
 @author
 @attention
 
 DEBUG 串口
 LORA  串口
 ***********************************************************************************/
#include "mid_uart.h"
/***********************************************************************************
 * @global param
***********************************************************************************/


/***********************************************************************************
 * @brief  串口初始化
 * @param 
***********************************************************************************/
void uart_debug_config_init(uint32_t baud)
{
    stc_uart_cfg_t    stcCfg;

    DDL_ZERO_STRUCT(stcCfg);

    ///< 开启外设时钟
    Sysctrl_SetPeripheralGate(SysctrlPeripheralUart1,TRUE);///<使能uart1模块时钟

    ///<UART Init
    stcCfg.enRunMode        = UartMskMode3;          ///<模式3
    stcCfg.enStopBit        = UartMsk1bit;           ///<1bit停止位
    stcCfg.enMmdorCk        = UartMskEven;           ///<偶检验

    
    stcCfg.stcBaud.u32Baud  = baud;                  ///<波特率
    stcCfg.stcBaud.enClkDiv = UartMsk8Or16Div;       ///<通道采样分频配置
    stcCfg.stcBaud.u32Pclk  = Sysctrl_GetPClkFreq(); ///<获得外设时钟（PCLK）频率值
    Uart_Init(M0P_UART1, &stcCfg);                   ///<串口初始化

    
    ///<UART中断使能
//    Uart_ClrStatus(M0P_UART1,UartRC);                ///<清接收请求
//    Uart_ClrStatus(M0P_UART1,UartTC);                ///<清接收请求
//    Uart_EnableIrq(M0P_UART1,UartRxIrq);             ///<使能串口接收中断
//    Uart_EnableIrq(M0P_UART1,UartTxIrq);             ///<使能串口接收中断
//    EnableNvic(UART1_IRQn, IrqLevel3, TRUE);         ///<系统中断使能
    
}
/***********************************************************************************
 * @brief  调试串口引脚配置
***********************************************************************************/
void uart_debug_init(void)
{

    stc_gpio_cfg_t stcGpioCfg;

    DDL_ZERO_STRUCT(stcGpioCfg);

    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE); //使能GPIO模块时钟

    ///<TX
    stcGpioCfg.enDir = GpioDirOut;
    Gpio_Init(GpioPortD, GpioPin0, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortD, GpioPin0, GpioAf3);          //配置PA02 端口为URART1_TX

    ///<RX
    stcGpioCfg.enDir = GpioDirIn;
    Gpio_Init(GpioPortD, GpioPin1, &stcGpioCfg);
    Gpio_SetAfMode(GpioPortD, GpioPin1, GpioAf3);          //配置PA03 端口为URART1_RX
    
    uart_debug_config_init(56000);
}

/***********************************************************************************
 * @brief  uart 连续发送
***********************************************************************************/
void uart_send(uint8_t* data,uint16_t len)
{
    for(uint16_t i=0;i<len;i++)
    {
        Uart_SendDataPoll(M0P_UART1,data[i]);   
    }  
}
/***********************************************************************************
 * @brief  重定向printf
***********************************************************************************/
int fputc(int ch, FILE* stream)
{
    //Uart_SendDataPoll(M0P_UART1,ch);  
    return ch;
}
